home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1998-08-25 | 3.1 KB | 132 lines |
- Goto BOING
- NUMBALLS=3
- Dim B(NUMBALLS,6)
- Screen Open 0,256,256,2,0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- Palette 0,$FFF
- Wait Vbl : Limit Mouse
- Double Buffer
- Autoback 0
- For A=1 To NUMBALLS
- B(A,0)=Rnd(65535)
- B(A,1)=Rnd(32768)
- B(A,2)=Rnd(1024)-512
- B(A,3)=Rnd(1024)-512
- B(A,4)=Rnd(32)+8
- B(A,5)=B(A,4)*B(A,4)
- B(A,6)=0
- Next
- Do
- Extension_8_121C 0,0
- ' B(1,0)=X Screen(X Mouse)*256
- ' B(1,1)=Y Screen(Y Mouse)*256
- For A=1 To NUMBALLS
- Add B(A,3),3
- If B(A,1)+B(A,4)*256>65536 Then B(A,3)=-B(A,3)
- Add B(A,0),B(A,2)
- Add B(A,1),B(A,3)
- For AA=1 To A
- If AA<>A
- DX= Extension_8_093A(B(A,0)-B(AA,0),8)
- DY= Extension_8_093A(B(A,1)-B(AA,1),8)
- R=B(A,4)+B(AA,4)
- R2=R*R
- D2=DX*DX+DY*DY
- If D2<R2
- If(B(A,6) and Extension_8_04F8(AA))=0 and(B(AA,6) and Extension_8_04F8(A))=0
- B(A,2)=(B(A,2)*Abs(DY)-B(A,2)*(Abs(DX)+32))/R
- B(A,3)=(B(A,3)*Abs(DX)-B(A,3)*(Abs(DY)+32))/R
- B(AA,2)=(B(AA,2)*Abs(DY)-B(AA,2)*(Abs(DX)+32))/R
- B(AA,3)=(B(AA,3)*Abs(DX)-B(AA,3)*(Abs(DY)+32))/R
- Colour 0,$F
- B(A,6)=B(A,6) or Extension_8_04F8(AA)
- B(AA,6)=B(AA,6) or Extension_8_04F8(A)
- End If
- Else
- Colour 0,0
- B(A,6)=B(A,6) and($FFFF- Extension_8_04F8(AA))
- B(AA,6)=B(AA,6) and($FFFF- Extension_8_04F8(A))
- End If
- End If
- Next
-
- B(A,0)=B(A,0) and $FFFF
- B(A,1)=B(A,1) and $FFFF
- Circle B(A,0)/256,B(A,1)/256,B(A,4)
- Next
- Screen Swap : Wait Vbl
- Loop
- End
- BOING:
- Screen Open 0,320,256,32,0
- Curs Off : Flash Off : Pen 15 : Paper 0 : Cls
- Extension_8_1722 0,$0 To 15,$FFF
- Extension_8_1722 16,$0 To 31,$F44
- BX=128 : BY=128
- LX=96 : LY=96
- R=30
- TX=R*2
- Do
- Extension_8_0388 LX,LY,Rnd(31)
- HLX=((BX-LX)*R)/128
- HLY=((BY-LY)*R)/128
- R2=R*R
- For YY=0 To R
- For XX=0 To R
- D2=XX*XX+YY*YY
- If D2<R2
- PX=-YY : PY=XX : Gosub SETDOTQPERS
- PX=YY : PY=XX : Gosub SETDOTQPERS
- PX=YY : PY=-XX : Gosub SETDOTQPERS
- PX=-YY : PY=-XX : Gosub SETDOTQPERS
- End If
- Next
- Next
- Inc TX
- ' Add TX,1,R*8 To R*9-1
- ' Add BX,-Qcos(TX*R+BX,4)
- ' Add BY,Qsin(TX*R+BY-BX,4)
- Loop
- SETDOTQPERS:
- DX=PX+HLX : DY=PY+HLY
- L2=DX*DX+DY*DY
-
- GX=((PX*R2)*4)/(R2*2-D2)
- GY=((PY*R2)*4)/(R2*2-D2)
-
- ' GX=((PX*R2)*4)/(1024+R2-D2)
- ' GY=((PY*R2)*4)/(1024+R2-D2)
-
- B=(((GX+TX)/R)+(GY+TX)/R) and 1
-
- ' DX=(GX+TX)+(((GY+TX)/16) and 1)*16
- ' B=(DX/16) and 1
-
- Extension_8_0388 PX+BX,PY+BY,Max(15-((L2*8)/R2),0)+B*16
- Return
- SETDOTPERS:
- DX=PX+HLX : DY=PY+HLY
- L2=DX*DX+DY*DY
- GX=((PX*R2)*2)/(1024+R2-D2)
- GY=((PY*R2)*2)/(1024+R2-D2)
- DX=(GX+TX)+(GY+TX)*2
- DY=(GY+TX)-(GX+TX)*2
- B=Abs((DX/R)-(DY/R)) and 1
- Extension_8_0388 PX+BX,PY+BY,Max(15-((L2*8)/R2),0)+B*16
- Return
- SETDOT:
- DX=PX+HLX : DY=PY+HLY
- L2=DX*DX+DY*DY
-
- B=(((PX+TX)/R)+(PY+TX)/R) and 1
-
- Extension_8_0388 PX+BX,PY+BY,Max(15-((L2*8)/R2),0)+B*16
- Return
- SETDOTOLD:
- DX=PX+HLX : DY=PY+HLY
- L= Extension_8_1366(DX*DX+DY*DY)
- DX=(PX+TX)+(PY+TX)*2
- DY=(PY+TX)-(PX+TX)*2
- B=(Abs(((DX*2)/R)-((DY*2)/R))) and 1
- Extension_8_0388 PX+BX,PY+BY,Max(15-((L*8)/R),0)+B*16
- Return